package com.briup.springboot_web.web.controller;


import com.briup.springboot_web.bean.Student;
import com.briup.springboot_web.util.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * 控制器类
 */
@Api(tags = "学生管理模块")
@RestController  //表示一个控制器类，当前注解将返回信息添加到响应体中
@RequestMapping("/student") //当前类中所有方法请求路径的前缀都是/student
public class StudentController {

    /*
        查询 GET http://localhost:8899/student?id=1
        返回数据： 对应学生信息
     */
    //注解表示当发送get url=/student 自动映射到当前方法，方法被自动调用
    @ApiOperation("根据学号查询对应的学生信息")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id",value = "学号")
    })//描述参数信息
    @GetMapping
    public Response findById(@RequestParam(required = true) Integer id){
        //1.接收参数： id=1
        //2.调用service方法 （略）
        //3.将service返回值，返回到浏览器
        return Response.success(new Student(id,"jack","北京"));
    }
    /*
        新增  POST  /student
             请求头： content-type:application/json
             请求体： {“id”:1,"name":"jack","address":"上海"}  json格式
     */
    @ApiOperation("新增学生")
    @PostMapping
    public Response addStudent(@RequestBody Student s){
        //@RequestBody 从请求体中获取json格式字符串转化为Student对象
        System.out.println("接受到参数信息："+s);
        return Response.success(); //表示告诉浏览器添加成功
    }

    /*
    修改  PUT   /student
        请求头：  application/json
        请求体： json格式： {“id”:1,"name":"tom","address":"南京"}
     */
    @ApiOperation("修改学生信息")
    @PutMapping
    public Response updateStudent(@RequestBody Student s){
        System.out.println("修改的学生信息："+s);
        return Response.success();
    }
    /*
        删除  DELETE   /student/4
     */
    @ApiOperation("根据学号删除学生信息")
    @DeleteMapping("/{id}")
    public Response deleteById(@PathVariable Integer id){
        //@PathVariable 获取到路径上对应的id变量的值
        System.out.println("删除学号："+id);
        return Response.success();//默认删除成功
    }

    /*

        查询所有学生信息
        GET /student/all  没有参数（路径 请求体）

     */
    @ApiOperation("查询所有学生信息")
    @GetMapping("/all")
    public Response findAll(){
        //1.接收参数

        //2.调用service方法

        //3.将方法的返回值返回响应报文
        Student s = new Student(1, "jack", "上海");
        Student s2 = new Student(2, "tom", "北京");
        List<Student> list = Arrays.asList(s, s2);
        return Response.success(list);
    }

    /*
    *  提交表单数据
    *  POST /student/form
    *  请求头： Content-Type:application/x-www-form-urlencoded
    *  请求体： id=1&name=jack&address=上海
    *
    * */
    @ApiOperation("通过提交表单数据新增学生")
    @PostMapping(value = "/form",consumes = "application/x-www-form-urlencoded")
    public Response addStudentUseForm(Student s){
        System.out.println("表单接收数据："+s);
        return Response.success();
    }
    /*
        根据多条件查询学生信息
        GET /student/condition
     */
    @ApiOperation("根据多条件查询学生信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "学号"),
            @ApiImplicitParam(name = "name",value = "姓名")
    })
    @GetMapping("/condition")
    public Response findByCondition(Integer id,String name){
        Student s = new Student(id,name,"北京");
        return Response.success(s);
    }
    /*
        分页查询学生信息
        GET /student/page  返回的数据是Page对象（mybatisplus）
     */
    /*
    *  批量删除的操作：
    *  DELETE  /delete/batch
    *  请求头： content-type:application/json
    *  请求体： [1,2,3,4,5]
    *
    * */
    @ApiOperation("批量删除学生信息")
    @DeleteMapping("/batch")
    public Response deletBybatch(@RequestBody List<Integer> ids){
        System.out.println("删除的id信息："+ids);
        System.out.println("新增一行代码");
        System.out.println("新增二行代码");
//        System
        return Response.success();
    }

}
